<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

class FollowsController extends AppController {

    var $name = 'Follows';

    public function index() {
        $this->layout = "ajax";
        $proyect_id = $this->Session->read('proy_id');
        $codigo = $this->Follow->Proyect->field('codigo', array('Proyect.id' => $proyect_id));


        $this->set('usuario', $this->Auth->user());
        $this->set('proyect_id', $proyect_id);
        $this->set('codigo', $codigo);
        if ($proyect_id == "") {
            $this->Session->setFlash('No ha seleccionado Proyecto');
            $this->redirect(array('controller' => 'Pages', 'action' => 'display'));
        } else {
            $this->Follow->recursive = -1;
            $this->set('seguimientos', $this->Follow->find('all', array('conditions' => array('Follow.proyect_id' => $proyect_id), 'fields' => array('Follow.*'), 'order' => array('Follow.inicio_programado ASC'))));
        }
    }

    public function delete($id = null, $proyect_id) {
        if ($this->Follow->delete($id)) {
            $this->Session->setFlash("Registro borrado correctamente", 'flash_custom');
            $this->redirect(array('controller' => 'Follows', 'action' => 'index'));
        }
    }

    public function edit($id) {
        $this->layout = "ajax";
        if (!empty($this->data)) {
            //Guardo el usuario que modifica el registro
            $this->data['Follow']['user_id'] = $this->Auth->user('id');

            if ($this->data['Follow']['tipo'] == 'Aprobación') {

                $codigo = $this->Follow->Proyect->field('codigo', array('Proyect.id' => $this->data['Follow']['proyect_id']));

                $rutaArchivo = APP . "webroot" . "/" . "files" . "/" . $codigo;
                if (!is_dir($rutaArchivo)) {
                    if (!mkdir($rutaArchivo)) {
                        echo "error creando archivo";
                        $this->redirect(array('controller' => 'Pages', 'action' => 'display'));
                    }
                }
                $nombreArchivo = "SEGUIMIENTO-$codigo-$id.zip";
                $rutaArchivo.= "/" . $nombreArchivo;

                $adjunto = true;
                if (!empty($this->data['Follow']['archivo']['tmp_name'])) {
                    try {
                        move_uploaded_file($this->data['Follow']['archivo']['tmp_name'], $rutaArchivo);
                        $this->data['Follow']['adjunto'] = $rutaArchivo;
                    } catch (Exception $exc) {
                        $adjunto = false;
                        echo $exc->getTraceAsString();
                        $this->Session->setFlash('Error guardanddo archivo', 'flash_custom');
                        $this->redirect(array('controller' => 'Pages', 'action' => 'display'));
                    }
                }

                if ($this->Follow->saveAll($this->data)) {
                    if ($adjunto) {
                        $this->Session->setFlash('Registro Adicionado correctamente', 'flash_custom');
                        $this->redirect(array('controller' => 'Follows', 'action' => 'index'));
                    }
                } else {
                    //NO PUDO GUARDAR LOS DATOS
                    $this->Session->setFlash('Error Guardando datos', 'flash_custom');
                    $this->redirect(array('controller' => 'Follows', 'action' => 'index'));
                }
            } else {
                //Si el tipo es distinto a Aprobación
                if ($this->Follow->save($this->data)) {
                    $this->Session->setFlash('Registro guardado correctamente');
                    $this->redirect(array('Controller' => 'Follows', 'action' => 'index'));
                } else {
                    $this->Session->setFlash('Error guardando los datos.');
                    $this->redirect(array('controller' => 'Follows', 'action' => 'index'));
                }
            }
        } else {
            $this->Follow->recursive = -1;
            $this->data = $this->Follow->find('first', array('conditions' => array('Follow.id' => $id), 'fields' => array('Follow.*')));
        }
    }

    public function edit2($id) {
        $this->layout = "ajax";
        if (!empty($this->data)) {
            $this->data['Follow']['user_id'] = $this->Auth->user('id');

            if ($this->data['Follow']['tipo'] == 'Aprobación') {


                $codigo = $this->Follow->Proyect->field('codigo', array('Proyect.id' => $this->data['Follow']['proyect_id']));

                $rutaArchivo = APP . "webroot" . "/" . "files" . "/" . $codigo;
                if (!is_dir($rutaArchivo)) {
                    if (!mkdir($rutaArchivo)) {
                        echo "error creando archivo";
                        //redirect
                    }
                }
                $nombreArchivo = "SEGUIMIENTO-$codigo-$id.zip";
                $rutaArchivo.= "/" . $nombreArchivo;
                $adjunto = true;
                if (!empty($this->data['Follow']['archivo']['tmp_name'])) {
                    try {
                        move_uploaded_file($this->data['Follow']['archivo']['tmp_name'], $rutaArchivo);
                        $this->data['Follow']['adjunto'] = $rutaArchivo;
                    } catch (Exception $exc) {
                        $adjunto = false;
                        echo $exc->getTraceAsString();
                        $this->Session->setFlash('Error guardanddo archivo', 'flash_custom');
                        $this->redirect(array('controller' => 'Pages', 'action' => 'display'));
                    }
                }

                if ($this->Follow->saveAll($this->data)) {
                    if ($adjunto) {
                        $this->Session->setFlash('Registro Adicionado correctamente', 'flash_custom');
                        $this->redirect(array('controller' => 'Follows', 'action' => 'index'));
                    }
                } else {
                    //NO PUDO GUARDAR LOS DATOS
                    $this->Session->setFlash('Error Guardando datos', 'flash_custom');
                    $this->redirect(array('controller' => 'Follows', 'action' => 'index'));
                }
            } else {
                //Si el tipo es distinto a Aprobación
                if ($this->Follow->save($this->data)) {
                    $this->Session->setFlash('Registro guardado correctamente');
                    $this->redirect(array('Controller' => 'Follows', 'action' => 'index'));
                } else {
                    $this->Session->setFlash('Error guardando los datos.');
                }
            }
        } else {
            $this->Follow->recursive = -1;
            $this->data = $this->Follow->find('first', array('conditions' => array('Follow.id' => $id), 'fields' => array('Follow.*')));
        }
    }

    public function report() {
        App::Import('model', 'Property');
        App::Import('model', 'Departament');

        $this->layout = 'pdf';
        ini_set('max_execution_time', 600); //increase max_execution_time to 10 min if data set is very large
        $filename = "Estado_Seguimiento_" . date("Y.m.d") . ".csv";
        $csv_file = fopen('php://output', 'w');
        header('Content-type: application/csv');
        header('Content-Disposition: attachment; filename="' . $filename . '"');

        $sql = "SELECT  DISTINCT Proyect.id, Proyect.codigo 
          FROM  proyects AS Proyect 
          LEFT JOIN  follows AS  Follow ON (Proyect.id = Follow.proyect_id ) 
          WHERE Follow.reporte = 1 and Proyect.call_id = 1";
        $this->Follow->recursive = -1;
        $results = $this->Follow->query($sql);

        // The column headings of your .csv file
        $header_row = array("PROYECTO", "CANTIDAD PREDIOS", "ÁREA (ha)", "ARCHIVO", "DEPARTAMENTO", "MUNICIPIO", "TOPOGRAFÍA INICIO", "TOPOGRAFÍA INICIO REAL", "TOPOGRAFÍA FIN", "TOPOGRAFÍA FIN REAL", "TOPOGRAFÍA OBSERVACIONES", "REVISIÓN INICIO", "REVISIÓN INICIO REAL", "REVISIÓN FIN", "REVISIÓN FIN REAL", "REVISIÓN OBSERVACIONES", "APROBACIÓN INICIO", "APROBACIÓN INICIO REAL", "APROBACIÓN FIN", "APROBACIÓN FIN REAL", "APROBACIÓN OBSERVACIONES", "AVALÚO INICIO", "AVALÚO INICIO REAL", "AVALÚO FIN", "AVALÚO FIN REAL", "AVALÚO OBSERVACIONES");
        fputcsv($csv_file, $header_row, ';', '"');

        $property = new Property();
        $property->recursive = 2;
        
        $departamento = new Departament();
        $departamento->recursive = -1;

        foreach ($results as $result) {
            $adjunto = "";
            $topografia = $this->Follow->find('first', array('conditions' => array('Follow.Proyect_id' => $result['Proyect']['id'], 'Follow.tipo' => 'Topografía campo'), 'order' => array('Follow.id DESC')));
            $revision = $this->Follow->find('first', array('conditions' => array('Follow.Proyect_id' => $result['Proyect']['id'], 'Follow.tipo' => 'Revisión'), 'order' => array('Follow.id DESC')));
            $aprobacion = $this->Follow->find('first', array('conditions' => array('Follow.Proyect_id' => $result['Proyect']['id'], 'Follow.tipo' => 'Aprobación'), 'order' => array('Follow.id DESC')));
            $comercial = $this->Follow->find('first', array('conditions' => array('Follow.Proyect_id' => $result['Proyect']['id'], 'Follow.tipo' => 'Avalúo comercial'), 'order' => array('Follow.id DESC')));

            $predios = $property->find('count', array('conditions' => array('Property.proyect_id' => $result['Proyect']['id'])));
            $ciudad = $property->find('first', array('conditions' => array('Property.proyect_id' => $result['Proyect']['id']), 'fields' => array('City.name', 'City.departament_id')));

            $departamento1 = $departamento->find('first', array('conditions' => array('Departament.id' => $ciudad['City']['departament_id']), 'fields' => array('Departament.name')));

            if (is_null($aprobacion['Follow']['adjunto']) or $aprobacion['Follow']['adjunto'] == "") {
                $adjunto = "No ha cargado archivo";
            } else {
                $adjunto = "Archivo cargado";
            }

            $area = number_format($aprobacion['Follow']['area'], 4, ',', '.');


            $row = array(
                $result['Proyect']['codigo'],
                $predios,
                $area,
                $adjunto,
                $departamento1['Departament']['name'],
                $ciudad['City']['name'],
                $topografia['Follow']['inicio_programado'],
                $topografia['Follow']['inicio_real'],
                $topografia['Follow']['fin_programado'],
                $topografia['Follow']['fin_real'],
                $topografia['Follow']['observacion'],
                $revision['Follow']['inicio_programado'],
                $revision['Follow']['inicio_real'],
                $revision['Follow']['fin_programado'],
                $revision['Follow']['fin_real'],
                $revision['Follow']['observacion'],
                $aprobacion['Follow']['inicio_programado'],
                $aprobacion['Follow']['inicio_real'],
                $aprobacion['Follow']['fin_programado'],
                $aprobacion['Follow']['fin_real'],
                $aprobacion['Follow']['observacion'],
                $comercial['Follow']['inicio_programado'],
                $comercial['Follow']['inicio_real'],
                $comercial['Follow']['fin_programado'],
                $comercial['Follow']['fin_real'],
                $comercial['Follow']['observacion'],
            );
            fputcsv($csv_file, $row, ';', '"');
        }

        fclose($csv_file);
    }

}

?>
